home *** CD-ROM | disk | FTP | other *** search
- ⓪ IMPLEMENTATION MODULE Paths; (* V#077 *)⓪ ⓪ (*$Y+,R-*)⓪ ⓪ (*⓪ IMPORT TOSDebug;⓪ *)⓪ ⓪ (*⓪ 01.04.88: TT SearchFile: wenn Abbruch bei fileselect, wird Leername⓪0geliefert; kein Stringoverflow bei '?'/OK.⓪ 02.08.89: TT Append durch Assign ersetzt⓪ 04.05.90 TT SearchFile: leerer Dateiname führt nicht mehr zur Suche⓪ 12.05.90 TT Aufruf von Fileselector übernimmt Namen nun endlich wieder⓪ 16.05.90 TT Validate bei SetHomePath⓪ 25.06.90 TT Aufteilung in Paths/PathEnv/PathCtrl⓪ 11.11.90 TT Wenn Datei gefunden, wird trotzdem Fsnext aufgerufen, um⓪.GEMDOS-Strukturen zurückzusetzen⓪ 25.04.91 TT Fsnext nur noch bei TOS 1.0 & 1.2⓪ *)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADR, ADDRESS;⓪ ⓪ FROM Lists IMPORT NextEntry, EndOfList, ResetList, ListEmpty, LCarrier;⓪ ⓪ FROM MOSGlobals IMPORT PathStr, FileStr, NameStr, MemArea;⓪ ⓪ FROM Directory IMPORT DefaultDrive, GetDefaultPath,⓪(DTA, GetDTA, SetDTA, MakeFullPath, DirEntry, GetDTAEntry;⓪ ⓪ FROM FileNames IMPORT DriveToStr, SplitPath, ConcatPath, ValidatePath;⓪ ⓪ IMPORT Strings, FastStrings;⓪ ⓪ FROM PathCtrl IMPORT PathList;⓪ ⓪ FROM PathEnv IMPORT SelectFile, ReplaceHome;⓪ ⓪ FROM Storage IMPORT ALLOCATE, DEALLOCATE;⓪ ⓪ ⓪ VAR needFsnext, ok: BOOLEAN;⓪ ⓪ PROCEDURE check ( REF name: ARRAY OF CHAR ): BOOLEAN;⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪((*⓪(TST.W TOSDebug.Hex⓪(BEQ noBrk⓪(BREAK⓪&noBrk⓪(*)⓪(MOVE.W -(A3),D0⓪(MOVE.L -(A3),A0⓪(CLR.B 0(A0,D0.W) ; Null an Namensende⓪(CLR.W -(A7) ; attrib, only files⓪(MOVE.L A0,-(A7) ; ^name⓪(MOVE #$4E,-(A7)⓪(TRAP #1 ; FSFIRST⓪(ADDQ.L #8,A7⓪(TST.L D0⓪(SPL D0⓪(ANDI #1,D0⓪(MOVE D0,(A3)+⓪$END;⓪"END check;⓪"(*$L=*)⓪ ⓪ PROCEDURE checkNext; (* gibt DTA-Puffer wieder frei, indem bis zum Ende⓪6* gesucht wird *)⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(TST.W needFsnext⓪(BEQ ende⓪&again⓪(MOVE #$4F,-(A7)⓪(TRAP #1 ; Fsnext⓪(ADDQ.L #2,A7⓪(TST.L D0⓪(BPL again⓪&ende⓪$END;⓪"END checkNext;⓪"(*$L=*)⓪ ⓪ (*$D-*)⓪ ⓪ PROCEDURE prepare (VAR name: ARRAY OF CHAR; VAR fsel: BOOLEAN);⓪"BEGIN⓪$ReplaceHome (name);⓪$fsel:= (name[0] = FSelSymbol);⓪$IF fsel THEN⓪&Strings.Delete (name, 0, 1, ok)⓪$END;⓪"END prepare;⓪ ⓪ PROCEDURE getName (dta: DTA; VAR resultName: ARRAY OF CHAR);⓪"VAR entry: DirEntry;⓪"BEGIN⓪$GetDTAEntry (dta, entry);⓪$ConcatPath (resultName, entry.name, resultName)⓪"END getName;⓪ ⓪ PROCEDURE doFSel (REF firstPath: ARRAY OF CHAR;⓪2dta: DTA;⓪2VAR pathName, name: ARRAY OF CHAR;⓪2VAR resultName: ARRAY OF CHAR;⓪2VAR abort, found: BOOLEAN );⓪"VAR sfx: ARRAY [0..3] OF CHAR; res: INTEGER; ok: BOOLEAN;⓪"BEGIN⓪$FastStrings.Copy ( name, Strings.PosLen ('.',name,1), 4, sfx );⓪$IF (pathName[0]=0C) AND (firstPath[0]#0C) THEN⓪&Strings.Assign (firstPath, pathName, ok);⓪$END;⓪$MakeFullPath (pathName, res);⓪$IF res < 0 THEN⓪&GetDefaultPath (pathName);⓪$END;⓪$IF sfx[0]=0C THEN sfx:= '.*' END;⓪$Strings.Append ('*', pathName, ok);⓪$FastStrings.Append (sfx, pathName);⓪$SelectFile ('',pathName,name,ok);⓪$IF ok THEN⓪&abort:= FALSE;⓪&ConcatPath ( pathName, name, resultName );⓪&found:= check (resultName);⓪&IF found THEN getName (dta, resultName); checkNext END⓪$ELSE⓪&abort:= TRUE;⓪&found:= FALSE;⓪&resultName[0]:= 0C (* bei Abbruch keinen Namen liefern *)⓪$END;⓪"END doFSel;⓪ ⓪ PROCEDURE SearchFile ( REF iname: ARRAY OF CHAR; VAR path: PathList; start: ListPos;⓪7VAR found: BOOLEAN; VAR resultName: ARRAY OF CHAR );⓪ ⓪"VAR pathName, firstPath: PathStr; firstname: FileStr;⓪&name: ARRAY [0..11] OF CHAR;⓪&p: POINTER TO PathStr; fsel, abort, firstChecked: BOOLEAN;⓪&olddta, dta: DTA;⓪ ⓪"PROCEDURE find (VAR path: ARRAY OF CHAR): BOOLEAN;⓪$BEGIN⓪&FastStrings.Concat (path,name,resultName);⓪&found:= check (resultName);⓪&IF found THEN getName (dta, resultName); checkNext END;⓪&RETURN found⓪$END find;⓪ ⓪"PROCEDURE myFSel;⓪$BEGIN⓪&doFSel (firstPath, dta, pathName, name, resultName, abort, found)⓪$END myFSel;⓪ ⓪"PROCEDURE clrup;⓪$BEGIN⓪&DISPOSE (dta);⓪&SetDTA (olddta)⓪$END clrup;⓪ ⓪"BEGIN⓪$found:= FALSE;⓪$⓪$(*⓪$IF Strings.StrEqual ('RUNTIME.DEF', iname) THEN⓪&TOSDebug.Active:= TRUE;⓪&TOSDebug.Step:= 0⓪$END;⓪$*)⓪$⓪$FastStrings.Assign (iname, firstname);⓪$prepare (firstname, fsel);⓪$SplitPath (firstname, firstPath, name);⓪$IF name [0] = 0C THEN⓪&resultName[0]:= 0C;⓪&RETURN⓪$END;⓪$⓪$GetDTA (olddta);⓪$NEW (dta);⓪$IF dta # NIL THEN SetDTA (dta) END;⓪$⓪$pathName:= '';⓪$firstChecked:= (start=fromStart);⓪$IF firstChecked THEN⓪&ResetList (path);⓪&IF fsel THEN⓪(myFSel;⓪(IF abort OR found THEN clrup; RETURN END⓪&ELSIF ListEmpty (path) OR (firstPath[0]#0C) THEN⓪((* Zuerst angegebenen Path prüfen *)⓪(IF find (firstPath) THEN clrup; RETURN END;⓪&END⓪$END;⓪$(* Jetzt die PathList durchsuchen *)⓪$LOOP⓪&p:= NextEntry(path);⓪&IF p=NIL THEN EXIT END;⓪&FastStrings.Assign (p^, pathName);⓪&prepare (pathName, fsel);⓪&ValidatePath (pathName);⓪&IF fsel THEN⓪(myFSel;⓪(IF abort OR found THEN clrup; RETURN END⓪&ELSE⓪(IF ~ (firstChecked & Strings.StrEqual (firstPath,pathName) )⓪(AND find (pathName) THEN clrup; RETURN END⓪&END⓪$END;⓪$clrup;⓪$Strings.Assign(firstname,resultName,ok)⓪"END SearchFile;⓪ ⓪ (*$D-*)⓪ ⓪ PROCEDURE MakeFullName ( VAR name: ARRAY OF CHAR; maySelect: BOOLEAN; VAR ok: BOOLEAN );⓪"VAR shortname: NameStr; pathName: PathStr; res: INTEGER; olddta, dta: DTA;⓪&abort, fsel: BOOLEAN;⓪"BEGIN⓪$ok:= TRUE;⓪$GetDTA (olddta);⓪$NEW (dta);⓪$IF dta # NIL THEN SetDTA (dta) END;⓪$prepare (name, fsel);⓪$IF maySelect & fsel THEN⓪&SplitPath (name, pathName, shortname);⓪&doFSel ('', dta, pathName, shortname, name, abort, ok)⓪$END;⓪$MakeFullPath (name, res);⓪$IF ok AND (res >= 0) THEN⓪&ok:= check (name);⓪&IF ok THEN getName (dta, name); checkNext END⓪$ELSE⓪&ok:= FALSE⓪$END;⓪$DISPOSE (dta);⓪$SetDTA (olddta)⓪"END MakeFullName;⓪ ⓪ PROCEDURE FullName ( REF name: ARRAY OF CHAR; maySelect: BOOLEAN ): FileStr;⓪"VAR fullname: FileStr;⓪"BEGIN⓪$Strings.Assign (name, fullname, ok);⓪$MakeFullName (fullname, maySelect, ok);⓪$RETURN fullname⓪"END FullName;⓪ ⓪ BEGIN⓪"ASSEMBLER⓪(BRA c⓪%t: MOVE.L $4F2,A0 ; ^TOS-Header⓪(MOVE.L 8(A0),D0 ; wg. altem AHDI⓪(RTS⓪%c: PEA t(PC)⓪(MOVE #38,-(A7)⓪(TRAP #14 ; Supexec⓪(ADDQ.L #6,A7⓪(MOVE.L D0,A0⓪(MOVE.W 2(A0),D1⓪(CMPI #$0104,D1⓪(SCS D0⓪(ANDI #1,D0⓪(MOVE D0,needFsnext⓪"END⓪ END Paths.⓪ ə
- (* $FFF8727B$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFED4934$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$00000FD8$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105$FFFD5105Ç$00000291T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00001947$00001922$00000768$0000074F$00000768$000007DC$00000768$000004D5$000001F6$00000294$00000267$00000270$00000291$00001825$00001919$00001951œÇâ*)
-